package Trab.ES1.Interface;

import Trab.ES1.Modelos.Grupo;
import Trab.ES1.Modelos.Receita;
import Trab.ES1.Modelos.Usuario;
import Trab.ES1.Utilidades.Fachada;
import java.util.Scanner;

/**
 *
 * @author Grupo H
 */
public class Criacao 
{
    private Fachada fachada;
    private Usuario usuario;
    
    public Criacao(Usuario u)
    {
        fachada = Fachada.getInstancia();
        this.usuario = u;
        inicio();
    }
    
    public Usuario getUsuario()
    {
        return this.usuario;
    }

    private void inicio() 
    {
        Scanner in = new Scanner(System.in);  
        int resp;
        do
        {
            System.out.println("1-Cria receita\n2-Cria grupo\n3-Sair");
            resp = in.nextInt();
            switch(resp)
            {
                case 1:
                    criaReceita();
                    break;
                case 2:
                    criaGrupo();
                    break;
                case 3:
                    break;
                default:
                    System.out.println("Opção inválida, tente novamente");
            }
        } while(resp != 3);
    }

    private void criaReceita() 
    {
        Scanner in = new Scanner(System.in);
        String nomeReceita, descricaoReceita;
        int tempoPreparo;
        do
        {
            System.out.println("Digite o nome desejado para a receita:");
            nomeReceita = in.nextLine();
            if(fachada.verificaUnicidadeReceita(nomeReceita))
                System.out.println("Nome inválido, tente novamente.");
        } while(fachada.verificaUnicidadeReceita(nomeReceita));    
        System.out.println("Digite uma descrição para a receita:");
        descricaoReceita = in.nextLine();
        System.out.println("Digite o tempo de preparo da receita:");
        tempoPreparo = in.nextInt();
        in.nextLine();
        Receita novaReceita = new Receita(nomeReceita, descricaoReceita, this.getUsuario(), tempoPreparo);
        insereIngredientes(novaReceita);
        insereCategorias(novaReceita);
    }

    private void criaGrupo() 
    {
        Scanner in = new Scanner(System.in);
        String nomeGrupo, descricaoGrupo;
        do
        {
            System.out.println("Digite o nome desejado para o grupo:");
            nomeGrupo = in.nextLine();
            if(fachada.verificaUnicidadeGrupo(nomeGrupo))
                System.out.println("Nome inválido, tente novamente.");
        } while(fachada.verificaUnicidadeGrupo(nomeGrupo));
        System.out.println("Digite uma descrição para o grupo:");
        descricaoGrupo = in.nextLine();
        fachada.criaNovoGrupo(nomeGrupo, descricaoGrupo, this.getUsuario());
    }

    private void insereCategorias(Receita r) 
    {
        Scanner in = new Scanner(System.in);
        int resp = 0;
        do
        {
            System.out.println("1-Criar nova categoria\n2-Usar categoria existente\n3-Sair");
            resp = in.nextInt();
            switch(resp)
            {
                case 1:
                    criaEInsereCategoria(r);
                    break;
                case 2:
                    buscaEInsereCategoria(r);
                    break;
                case 3:
                    break;
                default:
                    System.out.println("Opção inválida, tente novamente.");
            }
        } while(resp != 3);        
    }
    private void criaEInsereCategoria(Receita r) 
    {
        Scanner in = new Scanner(System.in);
        System.out.println("Digite o nome desejado para a categoria: ");
        String nomeCategoria = in.nextLine();
        if(!fachada.verificaUnicidadeCategoria(nomeCategoria))
        {
            fachada.adicionaCategoria(r, nomeCategoria);            
            fachada.criaNovaCategoria(nomeCategoria);
        }        
        else
            System.out.println("Categoria já existente!");
    }

    private void buscaEInsereCategoria(Receita r) 
    {
        Scanner in = new Scanner(System.in);
        System.out.println("Digite o nome da categoria a ser adicionada:");
        String nomeCategoria = in.nextLine();        
        if(fachada.buscaCategoria(nomeCategoria) != null)
            fachada.adicionaCategoria(r, nomeCategoria);
        else
            System.out.println("Categoria não existente!");
    }
    private void insereIngredientes(Receita r) 
    {
        Scanner in = new Scanner(System.in);
        int resp = 0;
        do
        {
            System.out.println("1-Criar novo ingrediente\n2-Usar ingrediente existente\n3-Sair");
            resp = in.nextInt();
            switch(resp)
            {
                case 1:
                    criaEInsereIngrediente(r);
                    break;
                case 2:
                    buscaEInsereIngrediente(r);
                    break;
                case 3:
                    break;
                default:
                    System.out.println("Opção inválida, tente novamente.");
            }
        } while(resp != 3);
    }

    private void criaEInsereIngrediente(Receita r) 
    {
        Scanner in = new Scanner(System.in);
        System.out.println("Digite o nome do ingrediente a ser criado:");
        String nomeIngrediente = in.nextLine();        
        if(!fachada.verificaUnicidadeIngrediente(nomeIngrediente))
        {
            fachada.adicionaIngrediente(r, nomeIngrediente);
            fachada.criaNovoIngrediente(nomeIngrediente);
        }
        else
            System.out.println("Ingrediente já existente!");
    }

    private void buscaEInsereIngrediente(Receita r) 
    {
        Scanner in = new Scanner(System.in);
        System.out.println("Digite o nome do ingrediente a ser adicionado:");
        String nomeIngrediente = in.nextLine();        
        if(fachada.buscaIngrediente(nomeIngrediente) != null)
            fachada.adicionaIngrediente(r, nomeIngrediente);
        else
            System.out.println("Ingrediente não existente!");
    }
}
